/* eslint-env node */
const vuePlugin = require('eslint-plugin-vue')
const tsPlugin = require('@typescript-eslint/eslint-plugin')
const prettierConfig = require('eslint-config-prettier')
const jsConfigs = require('@eslint/js')

module.exports = [

  // 设置全局忽略规则（✅ 新增）
  {
    ignores: [
      '**/node_modules/**',
      '**/dist/**',
      '**/build/**',
      '**/.git/**',
      '**/.vscode/**',
      '**/src/experimental.js'
    ]
  },

  // 使用 ESLint 内建的推荐基础规则集
  jsConfigs.configs.recommended,

  // 设置语言选项和全局环境
  {
    files: ['**/*.?(c|m)ts', '**/*.vue'],
    languageOptions: {
      ecmaVersion: 2021,
      sourceType: 'module',
      globals: {
        browser: true,     // 浏览器环境
        es2021: true,      // 支持 ES2021 语法
        node: true,        // ✅ 启用 Node.js 全局变量（如 process）
        jest: true,        // Jest 测试环境
      },
    },
  },

  // Vue 单文件组件解析器与处理器
  {
    files: ['**/*.vue'],
    languageOptions: {
      parser: require('vue-eslint-parser'),
      parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module',
        parser: require('@typescript-eslint/parser'), // 使用 TS 解析器
        jsxPragma: 'React',
        ecmaFeatures: {
          jsx: true,
        },
      },
    },
    plugins: {
      vue: vuePlugin,
    },
    processor: vuePlugin.processors['.vue'],
  },

  // TypeScript 支持
  {
    files: ['**/*.ts', '**/*.tsx', '**/*.vue'],
    plugins: {
      '@typescript-eslint': tsPlugin,
    },
    rules: {
      ...tsPlugin.configs.recommended.rules,
      '@typescript-eslint/no-unused-vars': 'error',
      '@typescript-eslint/prefer-ts-expect-error': 'error',
      '@typescript-eslint/no-explicit-any': 'off',
      '@typescript-eslint/no-non-null-assertion': 'off',
      '@typescript-eslint/no-namespace': 'off',
      '@typescript-eslint/semi': 'off',
    },
  },

  // Vue 3 规则定制
  {
    files: ['**/*.vue'],
    rules: {
      'vue/multi-word-component-names': 'off',
      'vue/no-mutating-props': 'off',
      'vue/attribute-hyphenation': 'off',
    },
  },

  // Prettier 整合（关闭所有冲突规则）
  prettierConfig,

  // 自定义通用规则
  {
    rules: {
      // ESLint 基础规则
      'no-var': 'error',
      'no-multiple-empty-lines': ['warn', { max: 1 }],
      'no-console': 'warn', // 或 'off'
      'no-debugger': 'error',
      'no-unexpected-multiline': 'error',
      'no-useless-escape': 'off',
    },
  },
]